* remove qmake.
* fix fedora cmake builds in CI.
* update build instructions in doc.
* more qmake cleanup
* remove rc stringification nonsense
* tweak build instructions.
- name: build_and_test
run: |
- ./tools/build_and_test.sh
+ # when using containers manually whitelist the checkout directory to allow git commands to work
+ git config --global --add safe.directory "${GITHUB_WORKSPACE}"
+ ./tools/build_and_test_cmake.sh
XCODE_VERSION: '12.4'
GENERATOR: 'Ninja'
RELEASE: false
- - QT_VERSION: '6.2.4'
- XCODE_VERSION: '12.5.1'
- GENERATOR: 'qmake'
- RELEASE: false
- QT_VERSION: '6.2.4'
XCODE_VERSION: '12.5.1'
GENERATOR: 'Xcode'
run: |
source ${HOME}/Cache/qt-${{ matrix.QT_VERSION }}.env
sudo xcode-select --switch /Applications/Xcode_${{ matrix.XCODE_VERSION }}.app
- if [ "${{ matrix.GENERATOR }}" == qmake ]; then
- ./tools/travis_script_osx
- else
- ./tools/ci_script_osx.sh . ${{ matrix.QT_VERSION }} ${{ matrix.GENERATOR }}
- fi
+ ./tools/ci_script_osx.sh . ${{ matrix.QT_VERSION }} ${{ matrix.GENERATOR }}
- name: Deploy
# This only handles continous releases now, for other events artifacts may be saved in
fail-fast: false
matrix:
include:
- - IMAGE: 'focal'
- SCRIPT: './tools/build_and_test.sh'
- IMAGE: 'focal'
SCRIPT: './tools/build_and_test_cmake.sh'
- IMAGE: 'jammy'
windows:
name: windows Build
- runs-on: windows-latest
+ runs-on: ${{ matrix.os }}
strategy:
fail-fast: false
matrix:
include:
- QT_VERSION: '5.12.12'
ARCH: 'amd64'
- HOST_ARCH: 'x86'
- COMPILER: 'msvc2017_64'
- METHOD: 'aqt'
- FLOW: 'nmake'
- RELEASE: false
- - QT_VERSION: '5.12.12'
- ARCH: 'amd64'
- HOST_ARCH: 'x86'
+ HOST_ARCH: 'amd64'
COMPILER: 'msvc2017_64'
METHOD: 'aqt'
- FLOW: 'msbuild'
+ GENERATOR: 'Visual Studio 16 2019'
RELEASE: false
+ os: windows-2019
- QT_VERSION: '5.12.12'
ARCH: 'amd64'
- HOST_ARCH: 'x86'
+ HOST_ARCH: 'amd64'
COMPILER: 'msvc2017_64'
- VCVERSION: '14.16'
+ TOOLSET: 'v141,version=14.16.27023'
METHOD: 'aqt'
- FLOW: 'nmake'
+ GENERATOR: 'Visual Studio 16 2019'
RELEASE: false
+ os: windows-2019
- QT_VERSION: '5.12.12'
ARCH: 'x86'
- HOST_ARCH: 'x86'
+ HOST_ARCH: 'amd64'
COMPILER: 'msvc2017'
METHOD: 'aqt'
+ GENERATOR: 'Visual Studio 16 2019'
RELEASE: false
- FLOW: 'nmake'
+ os: windows-2019
- QT_VERSION: '6.2.4'
ARCH: 'amd64'
HOST_ARCH: 'amd64'
COMPILER: 'msvc2019_64'
METHOD: 'aqt'
- RELEASE: true
- FLOW: 'nmake'
+ GENERATOR: 'Visual Studio 16 2019'
+ RELEASE: false
+ os: windows-2019
- QT_VERSION: '6.2.4'
ARCH: 'amd64'
HOST_ARCH: 'amd64'
COMPILER: 'msvc2019_64'
METHOD: 'aqt'
+ GENERATOR: 'Visual Studio 17 2022'
RELEASE: false
+ os: windows-latest
+ - QT_VERSION: '6.2.4'
+ ARCH: 'amd64'
+ HOST_ARCH: 'amd64'
+ COMPILER: 'msvc2019_64'
+ METHOD: 'aqt'
+ RELEASE: true
GENERATOR: 'Ninja'
+ os: windows-latest
steps:
- name: Checkout repository
shell: powershell
run: |
.\tools\ci_setup_windows.ps1 -qtdir "$Home\Cache\Qt\${{ matrix.QT_VERSION }}\${{ matrix.COMPILER }}" -arch "${{ matrix.ARCH }}" -host_arch "${{ matrix.HOST_ARCH }}" -vcversion "${{ matrix.VCVERSION }}"
- if ( "${{ matrix.generator }}" ) {
- .\tools\ci_script_windows.ps1 -generator "${{ matrix.GENERATOR }}" -arch "${{ matrix.ARCH }}" -toolset "${{ matrix.TOOLSET }}"
- } else {
- .\tools\make_windows_release.ps1 -iscc "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" -buildinstaller true -flow "${{ matrix.FLOW }}" -arch "${{ matrix.ARCH }}"
- }
+ .\tools\ci_script_windows.ps1 -generator "${{ matrix.GENERATOR }}" -arch "${{ matrix.ARCH }}" -toolset "${{ matrix.TOOLSET }}"
- name: Rename
shell: bash
+++ /dev/null
-name: "windows ondemand"
-
-on:
- schedule:
- - cron: '27 4 * * 2'
- workflow_dispatch: ~
-
-jobs:
-
- windows:
- name: windows ondemand Build
- runs-on: ${{ matrix.os }}
- strategy:
- fail-fast: false
- matrix:
- include:
- - QT_VERSION: '5.12.12'
- ARCH: 'amd64'
- HOST_ARCH: 'amd64'
- COMPILER: 'msvc2017_64'
- METHOD: 'aqt'
- GENERATOR: 'Visual Studio 16 2019'
- RELEASE: false
- os: windows-2019
- - QT_VERSION: '5.12.12'
- ARCH: 'amd64'
- HOST_ARCH: 'amd64'
- COMPILER: 'msvc2017_64'
- TOOLSET: 'v141,version=14.16.27023'
- METHOD: 'aqt'
- GENERATOR: 'Visual Studio 16 2019'
- RELEASE: false
- os: windows-2019
- - QT_VERSION: '5.12.12'
- ARCH: 'x86'
- HOST_ARCH: 'amd64'
- COMPILER: 'msvc2017'
- METHOD: 'aqt'
- GENERATOR: 'Visual Studio 16 2019'
- RELEASE: false
- os: windows-2019
- - QT_VERSION: '6.2.4'
- ARCH: 'amd64'
- HOST_ARCH: 'amd64'
- COMPILER: 'msvc2019_64'
- METHOD: 'aqt'
- GENERATOR: 'Visual Studio 16 2019'
- RELEASE: false
- os: windows-2019
- - QT_VERSION: '6.2.4'
- ARCH: 'amd64'
- HOST_ARCH: 'amd64'
- COMPILER: 'msvc2019_64'
- METHOD: 'aqt'
- GENERATOR: 'Visual Studio 17 2022'
- RELEASE: false
- os: windows-latest
-
- steps:
- - name: Checkout repository
- uses: actions/checkout@v3
-
- - name: Cache Qt
- uses: actions/cache@v3
- id: cache
- with:
- path: ~/Cache
- key: ${{ runner.os }}-${{ matrix.QT_VERSION }}-${{ matrix.COMPILER }}-${{ secrets.CACHE_VERSION }}
-
- - name: Install Qt setup(aqt)
- if: steps.cache.outputs.cache-hit != 'true'
- uses: actions/setup-python@v4
- with:
- python-version: '3.9'
-
- - name: Install Qt
- if: steps.cache.outputs.cache-hit != 'true'
- env:
- CI_BUILD_DIR: ${{ github.workspace }}
- shell: bash
- run: |
- ./tools/ci_install_windows.sh "${{ matrix.QT_VERSION }}" "${{ matrix.COMPILER }}" "${{ matrix.METHOD }}"
-
- - name: Build
- shell: powershell
- run: |
- .\tools\ci_setup_windows.ps1 -qtdir "$Home\Cache\Qt\${{ matrix.QT_VERSION }}\${{ matrix.COMPILER }}" -arch "${{ matrix.ARCH }}" -host_arch "${{ matrix.HOST_ARCH }}" -vcversion "${{ matrix.VCVERSION }}"
- if ( "${{ matrix.generator }}" ) {
- .\tools\ci_script_windows.ps1 -generator "${{ matrix.GENERATOR }}" -arch "${{ matrix.ARCH }}" -toolset "${{ matrix.TOOLSET }}"
- } else {
- .\tools\make_windows_release.ps1 -iscc "C:\Program Files (x86)\Inno Setup 6\ISCC.exe" -buildinstaller true -flow "${{ matrix.FLOW }}" -arch "${{ matrix.ARCH }}"
- }
-
- - name: Rename
- shell: bash
- run: |
- VERSION_ID=$(date -u +%Y%m%dT%H%MZ --date=$(git show -s --format=%aI HEAD))-$(git rev-parse --short=7 HEAD)
- mv bld/gui/GPSBabel-*-Setup.exe bld/gui/GPSBabel-${VERSION_ID}-Setup.exe
- mv bld/gui/GPSBabel-*-Manifest.txt bld/gui/GPSBabel-${VERSION_ID}-Manifest.txt
-
- - name: Test
- shell: bash
- run: |
- # PATH="${HOME}/Cache/Qt/${{ matrix.QT_VERSION }}/${{ matrix.COMPILER }}/bin:${PATH}"
- PNAME=./bld/gui/package/gpsbabel.exe GBTEMP=./gbtemp ./testo 2>&1
- PNAME=./bld/gui/package/gpsbabel.exe GBTEMP=./gbtemp ./test_encoding_utf8 2>&1
-
- - name: Deploy
- # This only handles continous releases now, for other events artifacts may be saved in
- # the 'Upload Artifacts' step.
- if: ( github.event_name == 'push' ) && ( github.ref == 'refs/heads/master' ) && matrix.RELEASE
- shell: bash
- env:
- GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
- RELEASE_NAME: Continuous-${{ runner.os }}
- run: |
- ./tools/uploadtool/upload_github.sh bld/gui/GPSBabel-*-Setup.exe
-
- - name: 'Upload Artifacts'
- uses: actions/upload-artifact@v3
- with:
- name: Windows_Installer ${{ join(matrix.*) }}
- path: |
- ./bld/gui/GPSBabel-*-Setup.exe
- ./bld/gui/GPSBabel-*-Manifest.txt
- retention-days: 7
+++ /dev/null
-# Enforce minimum Qt version.
-# versionAtLeast() was introduced in Qt 5.10, so we cannot count on it being available.
-MIN_QT_VERSION = 5.12 # major[.minor[.patch]]
-MIN_QT_VERSION_COMPONENTS = $$split(MIN_QT_VERSION, .)
-MIN_QT_VERSION_MAJOR = $$member(MIN_QT_VERSION_COMPONENTS, 0)
-MIN_QT_VERSION_MINOR = $$member(MIN_QT_VERSION_COMPONENTS, 1)
-MIN_QT_VERSION_PATCH = $$member(MIN_QT_VERSION_COMPONENTS, 2)
-count(MIN_QT_VERSION_MINOR, 0): MIN_QT_VERSION_MINOR = 0
-count(MIN_QT_VERSION_PATCH, 0): MIN_QT_VERSION_PATCH = 0
-lessThan(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR) | \
-if(equals(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR):lessThan(QT_MINOR_VERSION, $$MIN_QT_VERSION_MINOR)) | \
-if(equals(QT_MAJOR_VERSION, $$MIN_QT_VERSION_MAJOR):equals(QT_MINOR_VERSION, $$MIN_QT_VERSION_MINOR):lessThan(QT_PATCH_VERSION, $$MIN_QT_VERSION_PATCH)) {
- error("$$QMAKE_QMAKE uses Qt version $$QT_VERSION but version $${MIN_QT_VERSION_MAJOR}.$${MIN_QT_VERSION_MINOR}.$${MIN_QT_VERSION_PATCH} or newer is required.")
-}
-
-QT -= gui
-versionAtLeast(QT_VERSION, 6.0): QT += core5compat
-
-# set VERSION related variables and generate gbversion.h
-include(gbversion.pri)
-
-TARGET = gpsbabel
-VERSION = $$GB.VERSION
-
-CONFIG += console
-CONFIG -= app_bundle
-CONFIG += c++17
-CONFIG += link_pkgconfig
-!disable_pch {
- # avoid QTBUG-72404, QTBUG-79694 which were fixed in 5.14.0
- versionAtLeast(QT_VERSION, 5.14.0) | !contains(QMAKE_CXX, .*clang.*) {
- CONFIG += precompile_header
- PRECOMPILED_HEADER = precompiled_headers.h
- } else {
- message("Not using precompiled headers due to QTBUG.")
- }
-}
-
-TEMPLATE = app
-
-# RESOURCES
-RESOURCES = gpsbabel.qrc
-
-# MINIMAL_FMTS
-MINIMAL_FMTS = \
- explorist_ini.cc \
- garmin.cc \
- garmin_device_xml.cc \
- garmin_tables.cc \
- geo.cc \
- gpx.cc \
- kml.cc \
- magproto.cc \
- nmea.cc \
- wbt-200.cc
-
-# ALL_FMTS
-ALL_FMTS = $$MINIMAL_FMTS \
- brauniger_iq.cc \
- dg-100.cc \
- exif.cc \
- garmin_fit.cc \
- garmin_gpi.cc \
- garmin_txt.cc \
- garmin_xt.cc \
- gdb.cc \
- geojson.cc \
- globalsat_sport.cc \
- gpssim.cc \
- gtm.cc \
- gtrnctr.cc \
- holux.cc \
- html.cc \
- humminbird.cc \
- igc.cc \
- lowranceusr.cc \
- mtk_logger.cc \
- navilink.cc \
- osm.cc \
- ozi.cc \
- qstarz_bl_1000.cc \
- random.cc \
- sbn.cc \
- sbp.cc \
- shape.cc \
- skytraq.cc \
- subrip.cc \
- text.cc \
- tpg.cc \
- tpo.cc \
- unicsv.cc \
- v900.cc \
- vcf.cc \
- xcsv.cc \
-
-# ALL_FMTS = $$MINIMAL_FMTS
-
-# FILTERS
-FILTERS = \
- arcdist.cc \
- bend.cc \
- discard.cc \
- duplicate.cc \
- height.cc \
- interpolate.cc \
- nukedata.cc \
- polygon.cc \
- position.cc \
- radius.cc \
- resample.cc \
- reverse_route.cc \
- smplrout.cc \
- sort.cc \
- stackfilter.cc \
- swapdata.cc \
- trackfilter.cc \
- transform.cc \
- validate.cc
-FILTER_HEADERS = $$FILTERS
-FILTER_HEADERS ~= s/\\.cc/.h/g
-
-# JEEPS
-JEEPS += \
- jeeps/gpsapp.cc \
- jeeps/gpscom.cc \
- jeeps/gpsdevice.cc \
- jeeps/gpsdevice_ser.cc \
- jeeps/gpsdevice_usb.cc \
- jeeps/gpsmath.cc \
- jeeps/gpsmem.cc \
- jeeps/gpsprot.cc \
- jeeps/gpsread.cc \
- jeeps/gpsrqst.cc \
- jeeps/gpssend.cc \
- jeeps/gpsserial.cc \
- jeeps/gpsusbcommon.cc \
- jeeps/gpsusbread.cc \
- jeeps/gpsusbsend.cc \
- jeeps/jgpsutil.cc
-
-
-# SUPPORT
-SUPPORT = \
- cet_util.cc \
- csv_util.cc \
- fatal.cc \
- filter_vecs.cc \
- formspec.cc \
- garmin_fs.cc \
- gbfile.cc \
- gbser.cc \
- globals.cc \
- grtcirc.cc \
- inifile.cc \
- main.cc \
- mkshort.cc \
- parse.cc \
- rgbcolors.cc \
- route.cc \
- session.cc \
- src/core/logging.cc \
- src/core/nvector.cc \
- src/core/textstream.cc \
- src/core/usasciicodec.cc \
- src/core/vector3d.cc \
- src/core/xmlstreamwriter.cc \
- strptime.c \
- units.cc \
- util.cc \
- util_crc.cc \
- vecs.cc \
- waypt.cc \
- xmlgeneric.cc \
- xmltag.cc
-
-versionAtLeast(QT_VERSION, 6.0): SUPPORT += src/core/codecdevice.cc
-
-# HEADERS
-HEADERS = \
- cet_util.h \
- csv_util.h \
- defs.h \
- dg-100.h \
- exif.h \
- explorist_ini.h \
- filter.h \
- filter_vecs.h \
- format.h \
- formspec.h \
- garmin_device_xml.h \
- garmin_fit.h \
- garmin_fs.h \
- garmin_gpi.h \
- garmin_icon_tables.h \
- garmin_tables.h \
- gbfile.h \
- gbser.h \
- gbser_private.h \
- gdb.h \
- geojson.h \
- globalsat_sport.h \
- gpx.h \
- grtcirc.h \
- gtrnctr.h \
- heightgrid.h \
- holux.h \
- humminbird.h \
- html.h \
- inifile.h \
- kml.h \
- legacyformat.h \
- lowranceusr.h \
- magellan.h \
- navilink.h \
- nmea.h \
- osm.h \
- qstarz_bl_1000.h \
- random.h \
- session.h \
- shape.h \
- skytraq.h \
- strptime.h \
- subrip.h \
- text.h \
- unicsv.h \
- units.h \
- vecs.h \
- xcsv.h \
- xmlgeneric.h \
- jeeps/garminusb.h \
- jeeps/gps.h \
- jeeps/gpsapp.h \
- jeeps/gpscom.h \
- jeeps/gpsdatum.h \
- jeeps/gpsdevice.h \
- jeeps/gpsfmt.h \
- jeeps/gpsmath.h \
- jeeps/gpsmem.h \
- jeeps/gpsport.h \
- jeeps/gpsprot.h \
- jeeps/gpsread.h \
- jeeps/gpsrqst.h \
- jeeps/gpssend.h \
- jeeps/gpsserial.h \
- jeeps/gpsusbcommon.h \
- jeeps/gpsusbint.h \
- jeeps/gpsutil.h \
- src/core/datetime.h \
- src/core/file.h \
- src/core/logging.h \
- src/core/nvector.h \
- src/core/textstream.h \
- src/core/usasciicodec.h \
- src/core/vector3d.h \
- src/core/xmlstreamwriter.h \
- src/core/xmltag.h
-
-versionAtLeast(QT_VERSION, 6.0): HEADERS += src/core/codecdevice.h
-
-HEADERS += $$FILTER_HEADERS
-
-CONFIG(release, debug|release): DEFINES *= NDEBUG
-
-unix {
- if (equals(MAKEFILE_GENERATOR, XCODE)) {
- # "Configure tests are not supported with the XCODE Makefile generator"
- # assume we have the following headers
- # these are used by zlib
- DEFINES += HAVE_UNISTD_H
- DEFINES += HAVE_STDARG_H
- } else {
- load(configure)
- qtCompileTest(unistd) {
- # this is used by zlib
- DEFINES += HAVE_UNISTD_H
- }
- qtCompileTest(stdarg) {
- # this is used by zlib
- DEFINES += HAVE_STDARG_H
- }
- }
- SOURCES += gbser_posix.cc
- HEADERS += gbser_posix.h
-}
-
-win32 {
- DEFINES += __WIN32__
- DEFINES -= UNICODE _UNICODE
- CONFIG(debug, debug|release) {
- DEFINES += _DEBUG
- }
- SOURCES += gbser_win.cc
- HEADERS += gbser_win.h
- JEEPS += jeeps/gpsusbwin.cc
- LIBS += "-lsetupapi"
- RC_FILE = win32/gpsbabel.rc
-}
-
-win32-msvc* {
- DEFINES += _CRT_SECURE_NO_WARNINGS
- DEFINES += _CRT_NONSTDC_NO_WARNINGS
- QMAKE_CFLAGS += /MP -wd4267
- QMAKE_CXXFLAGS += /MP -wd4267
- # The -wd (disable warning) and -w3 (change warning to level 3) options are exclusive.
- # The win32-msvc makespec uses -w34100, which can interfer with -wd4100.
- # Their are two qmake settings for warnings in CONFIG: warn_on and warn_off.
- # This results in the warning showing with msbuild, but not with nmake, even if
- # -wd4100 is included in QMAKE_CFLAGS and QMAKE_CXXFLAGS.
- # Override win32-msvc, leaving these warnings at their default of level 4, which
- # will not show up because we run at level 3.
- # shapelib/shpopen.c can cause a C4100 error.
- QMAKE_CFLAGS_WARN_ON -= -w34100
- QMAKE_CXXFLAGS_WARN_ON -= -w34100
-}
-
-include(shapelib.pri)
-include(zlib.pri)
-include(libusb.pri)
-
-SOURCES += $$ALL_FMTS $$FILTERS $$SUPPORT $$JEEPS
-
-SOURCES = $$sorted(SOURCES)
-HEADERS = $$sorted(HEADERS)
-
-# We don't care about stripping things out of the build. Full monty, baby.
-DEFINES += MAXIMAL_ENABLED
-DEFINES += FILTERS_ENABLED
-DEFINES += CSVFMTS_ENABLED
-
-# Creator insists on adding -W to -Wall which results in a completely
-# absurd amount of jibber-jabber on perfectly legally formed code.
-# Rather than wade through a thousand lines of yammer, let's just nuke -W
-# but leave -Wall, which actually has useful stuff.
-# Citation: http://stackoverflow.com/questions/18667291/disable-wall-compiler-warnings-in-a-qt-project
-QMAKE_CFLAGS_WARN_ON -= -W
-QMAKE_CXXFLAGS_WARN_ON -= -W
-
-check.depends = $(TARGET) FORCE
-check.commands = @PNAME=./$(TARGET) $${PWD}/testo
-QMAKE_EXTRA_TARGETS += check
-
-check-vtesto.depends = $(TARGET) FORCE
-check-vtesto.commands += @$(MAKE) -s -f $${PWD}/Makefile_vtesto srcdir=$${PWD} builddir=$${OUT_PWD} check-vtesto
-QMAKE_EXTRA_TARGETS += check-vtesto
-QMAKE_CLEAN += $${OUT_PWD}/testo.d/*.vglog
-
-# build the compilation data base used by clang tools including clang-tidy.
-unix {
- compile_command_database.target = compile_commands.json
- compile_command_database.commands = $(MAKE) clean; bear $(MAKE)
- QMAKE_EXTRA_TARGETS += compile_command_database
-}
-
-# run clang-tidy
-# example usage:
-# make clang-tidy RUN_CLANG_TIDY_FLAGS="-header-filter=.*\\\.h -checks=-*,modernize-use-nullptr -fix"
-# It seems to be better to use run-clang-tidy with the compilation database as opposed to
-# running clang-tidy directly and listing the
-# compilation options on the clang-tidy line after --.
-# An example is modernize-use-override which inserts repeadted overrides when run directly,
-# but works as expected when run with run-clang-tidy.
-clang-tidy.commands = run-clang-tidy.py $(RUN_CLANG_TIDY_FLAGS)
-clang-tidy.depends = compile_commands.json
-QMAKE_EXTRA_TARGETS += clang-tidy
-
-# generate coverage report for codacy
-# must use gcc, g++
-# dependencies:
-# extra ubuntu bionic packages: gcovr lcov
-linux{
- coverage.commands = $(MAKE) clean;
- coverage.commands += rm -f gpsbabel_coverage.xml;
- coverage.commands += $(MAKE) CFLAGS=\"$(CFLAGS) -fprofile-arcs -ftest-coverage\" CXXFLAGS=\"$(CXXFLAGS) -fprofile-arcs -ftest-coverage\" LFLAGS=\"$(LFLAGS) --coverage\" &&
- coverage.commands += ./testo &&
- coverage.commands += gcov -r -o . $(SOURCES) &&
- coverage.commands += gcovr -k -r . --xml --exclude='zlib/*' --exclude='shapelib/*' -o gpsbabel_coverage.xml;
- coverage.commands += lcov --capture --directory . --no-external --output-file coverage.info;
- coverage.commands += genhtml coverage.info --output-directory coverage_report;
- QMAKE_EXTRA_TARGETS += coverage
-}
-
-cppcheck.commands = cppcheck --enable=all --force --config-exclude=zlib --config-exclude=shapelib $(INCPATH) $$ALL_FMTS $$FILTERS $$SUPPORT $$JEEPS
-QMAKE_EXTRA_TARGETS += cppcheck
-
-gpsbabel.org.depends = gpsbabel gpsbabel.pdf FORCE
-equals(PWD, $${OUT_PWD}) {
- # may be overridden on qmake command line
- !defined(WEB, var) {
- WEB = ../babelweb
- }
- gpsbabel.org.commands += tools/make_gpsbabel_org.sh $$shell_quote($$WEB) $$shell_quote($$DOCVERSION);
-} else {
- gpsbabel.org.commands += echo "target gpsbabel.org is not supported for out of source builds.";
- gpsbabel.org.commands += exit 1;
-}
-QMAKE_EXTRA_TARGETS += gpsbabel.org
-
-#
-# The gpsbabel.pdf target depends on additional tools.
-# On macOS you can 'brew install fop' to get fop and the hyphenation package.
-# On Debian/Ubuntu you can 'apt-get install fop' to get fop and the hyphenation package.
-# 'fop' must be obtained from your distribution or http://xmlgraphics.apache.org/fop/
-# 0.92beta seems to work OK, BUT.
-# * If you have a package called 'docbook-xml-website' it's reported
-# to prevent the build from working. Remove it. (Suse)
-# * Sun Java seems to be required. GCJ 1.4.2 doesn't work. You can
-# force Sun Java to be used by creating ~/.foprc with 'rpm_mode=' (Fedora)
-# Get it from http://www.java.com
-# The Hyphenation package must be obtained from your distribution or
-# the project site at http://offo.sourceforge.net/ - be sure to get the
-# version that corresponds to the version of FOP that you used above.
-#
-#
-# The docbook XSL must be 1.71.1 or higher.
-# * Remember to update /etc/xml/catalogs if you manually update this.
-#
-
-gpsbabel.html.depends = gpsbabel FORCE
-equals(PWD, $${OUT_PWD}) {
- gpsbabel.html.commands += tools/make_gpsbabel_html.sh
-} else {
- gpsbabel.html.commands += echo "target gpsbabel.html is not supported for out of source builds.";
- gpsbabel.html.commands += exit 1;
-}
-QMAKE_EXTRA_TARGETS += gpsbabel.html
-
-gpsbabel.pdf.depends = gpsbabel FORCE
-equals(PWD, $${OUT_PWD}) {
- gpsbabel.pdf.commands += tools/make_gpsbabel_pdf.sh
-} else {
- gpsbabel.pdf.commands += echo "target gpsbabel.pdf is not supported for out of source builds.";
- gpsbabel.pdf.commands += exit 1;
-}
-QMAKE_EXTRA_TARGETS += gpsbabel.pdf
-
-gui.depends = $(TARGET) FORCE
-disable-mappreview {
- guiconfig = "CONFIG+=disable-mappreview"
-}
-gui.commands += cd gui; $(QMAKE) $${guiconfig} app.pro && $(MAKE)
-QMAKE_EXTRA_TARGETS += gui
-
-unix-gui.depends = gui FORCE
-unix-gui.commands += cd gui; $(MAKE) package
-QMAKE_EXTRA_TARGETS += unix-gui
-
-toolinfo.depends = FORCE
-toolinfo.commands += $(CC) --version;
-toolinfo.commands += $(CXX) --version;
-toolinfo.commands += $(QMAKE) -v;
-QMAKE_EXTRA_TARGETS += toolinfo
-
-The autotools based build system (configure) is no longer supported and has
-been removed.
+The only build system generator supported is cmake. The autotools based build
+system (configure) and the qmake based build system are no longer supported
+and have been removed.
-The use of cmake is experimental. The implementation is not complete. It is
-untested by continuous integration. It is not recommended for production use.
+The Ninja generator is recommended and tested in continuous integration.
+The Visual Studio 16 2019, Visual Studio 17 2022 and Xcode generators are
+also tested in continuous integration.
-The recommended build uses Qt's qmake:
+An example to build the command line client gpsbabel and the graphical
+user interface gpsbabelfe from the top level directory is:
+mkdir bld;
+cd bld;
+cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_PREFIX_PATH=/path/to/Qt -G Ninja ..
+cmake --build .
-The following options may be set on the qmake command line.
+The following cache variables can be used to control the build:
-WITH_LIBUSB=no|pkgconfig|system*|included*|custom
+GPSBABEL_WITH_LIBUSB:STRING=no|pkgconfig|system*|included*|custom
note that libusb is NOT used on windows.
no: build without libusb-1.0. functionality will be limited.
pkgconfig: build with libusb-1.0 found by pkg-config.
libusb-1.0 on system include path (default, linux, openbsd).
included: build with libusb-1.0 included with gpsbabel (default, macOS only).
custom: build with user supplied libusb-1.0. LIBS and INCLUDEPATH may need to
- be set, e.g. LIBS+=... INCLUDEPATH+=...
+ be set with GPSBABEL_EXTRA_LINK_LIBRARIES and
+ GPSBABEL_EXTRA_INCLUDE_DIRECTORIES.
-WITH_SHAPELIB=no|pkgconfig|included*|custom
+GPSBABEL_WITH_SHAPELIB:STRING=no|pkgconfig|included*|custom
no: build without shapelib. functionality will be limited.
pkgconfig: build with shapelib found by pkg-config.
included: build with shapelib included with gpsbabel (default).
custom: build with user supplied shapelib. LIBS and INCLUDEPATH may need to
- be set, e.g. LIBS+=... INCLUDEPATH+=...
+ be set with GPSBABEL_EXTRA_LINK_LIBRARIES and
+ GPSBABEL_EXTRA_INCLUDE_DIRECTORIES.
-WITH_ZLIB=no|pkgconfig|included*|custom
+GPSBABEL_WITH_ZLIB:STRING=no|pkgconfig|included*|custom
no: build without zlib. functionality will be limited.
pkgconfig: build with zlib found by pkg-config.
included: build with zlib included with gpsbabel (default).
custom: build with user supplied zlib. LIBS and INCLUDEPATH may need to be
- set, e.g. LIBS+=... INCLUDEPATH+=...
+ set with GPSBABEL_EXTRA_LINK_LIBRARIES and
+ GPSBABEL_EXTRA_INCLUDE_DIRECTORIES.
-CONFIG+=disable-mappreview
- This options disables the map preview feature. With the feature disabled
+GPSBABEL_MAPPREVIEW=ON*|OFF
+ This options enables the map preview feature. With the feature disabled
QtWebEngine and QtWebEngineWdigets are not used. Note that QtWebKit and
QtWebKitWidgets are not longer supported.
-DOCVERSION=...
+GPSBABEL_EMBED_MAP:BOOL=ON|OFF
+ Embed gmapbase.html for map preview. When using this option gmapbase.html
+ will be compiled into the executable and does not need to be distributed.
+
+GPSBABEL_EMBED_TRANSLATIONS:BOOL:ON|OFF
+ Embed translations. When using this option the gpsbabel provided
+ translations will be compiled into the executable and do not need to be
+ distributed. The Qt provided translations still need to be distributed.
+
+GPSBABEL_ENABLE_PCH:BOOL
+ Enable precompiled headers when building the target gpsbabel.
+
+GPSBABEL_EXTRA_COMPILE_OPTIONS:STRING
+ Extra compile options when building the target gpsbabel.
+
+GPSBABEL_EXTRA_INCLUDE_DIRECTORIES:STRING
+ Extra directories to include when building the target gpsbabel.
+
+GPSBABEL_EXTRA_LINK_LIBRARIES:STRING
+ Extra libraries to link when building the target gpsbabel.
+
+GPSBABEL_EXTRA_LINK_OPTIONS:STRING
+ Extra link options when building the target gpsbabel.
+
+DOCVERSION:STRING=...
string appended to documentation location for www.gpsbabel.org. The default
value is the version string, e.g. "1.7.0". This is used by the gpsbabel.org
target, you are unlikely to need it unless you are maintaining
www.gpsbabel.org.
-WEB=DIR
+WEB:STRING=DIR
Path where the documentation will be stored for www.gpsbabel.org. This is
used by the gpsbabel.org target, you are unlikely to need it unless you are
maintaining www.gpsbabel.org. The default location is "../babelweb"
-Make targets:
+Targets:
check: Run the basic test suite.
check-vtesto: Run valgrind memcheck.
gpsbabel.hmtl: Create the html documentation.
gpsbabel.org: Create documentation for use on www.gpsbabel.org.
gpsbabel.pdf: Create the pdf documentation.
-gui: Build the graphical user interface.
-unix-gui: Build the graphical user interface and collect the components for
- distribution. On Linux the gpsbabel generated components will be under
+gpsbabelfe: Build the graphical user interface.
+package_app: Collect the components for distribution.
+ On Linux the gpsbabel generated components will be under
gui/GPSBabelFE, any dynamically linked required libraries are not included.
On macOS an app bundle will be created at gui/GPSBabelFE.app and an apple disk
image will be created at gui/GPSBabelFE.dmg.
+ On windows an image will be created in the directory gui/package, and an
+ installer will be created gui/Setup-x.y.z-Setup.exe.
Dependencies:
On non-macOS unix builds by default we now compile in the gpsbabel generated
used if they are found. They may be in a package such as qttranslations5-l10n
or qt5-qttranslations.
-Windows builds:
- Two build methods are supported with MSVC tools.
- 1. "qmake -tp vc" will create a visual studio project that can be built with msbuild.
- 2. "qmake" will create a Makefile that can be built with nmake.
-
#define VER_PRODUCT @GB.MAJOR@,@GB.MINOR@,@GB.MICRO@,@GB.BUILD@
#define VER_FILE_STR "@GB.MAJOR@.@GB.MINOR@.@GB.MICRO@@GB.PACKAGE_RELEASE@"
#define VER_PRODUCT_STR "@GB.MAJOR@.@GB.MINOR@.@GB.MICRO@@GB.PACKAGE_RELEASE@"
-#define VER_COPYRIGHT_YEAR @GB.COPYRIGHT_YEAR@
+#define VER_COPYRIGHT_STR L"\x00a9 2002-@GB.COPYRIGHT_YEAR@ Robert Lipe"
#else
#define VERSION "@GB.MAJOR@.@GB.MINOR@.@GB.MICRO@@GB.PACKAGE_RELEASE@"
constexpr char kVersionSHA[] = "@GB.SHA@";
+++ /dev/null
-/*
- * gbversion.h is generated from gbversion.h.in which uses autoconf voodoo
- * to get the version number from configure.ac.
- *
- * Isn\'t simplification via automation grand?
- */
-#ifdef RC_INVOKED
-// These defines are for the Microsoft resource compiler scripts
-// win32/gpsbabel.rc and gui/app.rc
-#define VER_FILE $${GB.MAJOR},$${GB.MINOR},$${GB.MICRO},$${GB.BUILD}
-#define VER_PRODUCT $${GB.MAJOR},$${GB.MINOR},$${GB.MICRO},$${GB.BUILD}
-#define VER_FILE_STR \"$${GB.MAJOR}.$${GB.MINOR}.$${GB.MICRO}$${GB.PACKAGE_RELEASE}\"
-#define VER_PRODUCT_STR \"$${GB.MAJOR}.$${GB.MINOR}.$${GB.MICRO}$${GB.PACKAGE_RELEASE}\"
-#define VER_COPYRIGHT_YEAR $${GB.COPYRIGHT_YEAR}
-#else
-#define VERSION \"$${GB.MAJOR}.$${GB.MINOR}.$${GB.MICRO}$${GB.PACKAGE_RELEASE}\"
-constexpr char kVersionSHA[] = \"$${GB.SHA}\";
-#define WEB_DOC_DIR \"https://www.gpsbabel.org/htmldoc-$${DOCVERSION}\"
-#endif
+++ /dev/null
-# Use GB variable to express ownership intention and avoid conflict with
-# documented and undocumented qmake variables.
-
-# Until we do a hierarchical build the build directory for gpsbabel and
-# the build directory for GPSBabelFE are independent. Only the source
-# directories have a known relationship. Including this pri file from the
-# source tree will generate the version file in the current build directory.
-
-# Note some of these variables are also used in the gui to generate setup.iss.
-# Note some of these variables are also used in the cli to generate documents.
-
-# FIXME: Today we have multiple independent .pro files. By defining
-# the version here we minimize the number of locations containing the
-# definition to gbversion.pri and gbversion.cmake. When we retire qmake
-# we will be back to only one place for version to be defined.
-
-GB.VERSION = 1.8.0 # Also change in gbversion.cmake
-GB.VERSION_COMPONENTS = $$split(GB.VERSION, .)
-GB.MAJOR = $$member(GB.VERSION_COMPONENTS, 0)
-GB.MINOR = $$member(GB.VERSION_COMPONENTS, 1)
-GB.MICRO = $$member(GB.VERSION_COMPONENTS, 2)
-# Increase GB.BUILD for a new release (why? Where is this ever used?)
-# A: it's used by win32/gpsbabel.rc which includes gbversion.h
-GB.BUILD = 32
-# GB.PACKAGE_RELEASE = "-beta20190413"
-GB.SHA = $$(GITHUB_SHA)
-GB.COPYRIGHT_YEAR = 2022
-
-# may be overridden on qmake command line
-!defined(DOCVERSION, var) {
-DOCVERSION=$${GB.VERSION}
-}
-
-# use undocumented QMAKE_SUBSTITUTES variable to emulate AC_CONFIG_FILES
-# Note $${PWD} is relative to the location of this file.
-GB.versionfile.input = $${PWD}/gbversion.h.qmake.in
-GB.versionfile.output = gbversion.h
-QMAKE_SUBSTITUTES += GB.versionfile
if (NOT Qt${QT_VERSION_MAJOR}LinguistTools_FOUND)
message(WARNING "Qt${QT_VERSION_MAJOR}LinguistTools not found, gpsbabelfe translations cannot be updated or released, and application cannot be packaged.")
else()
-# FIXME: remove reliance an app.pro in package_app script.
# FIXME: translations updated and released in source directory (and under version control).
list(APPEND TRANSLATIONS gpsbabelfe_de.ts)
list(APPEND TRANSLATIONS gpsbabelfe_es.ts)
if(APPLE)
get_target_property(_qmake_executable Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
add_custom_target(package_app
- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/package_app -a $<TARGET_BUNDLE_DIR:gpsbabelfe> -l -q ${_qmake_executable} -g $<TARGET_FILE:gpsbabel> -s ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/package_app -a $<TARGET_BUNDLE_DIR:gpsbabelfe> -q ${_qmake_executable} -g $<TARGET_FILE:gpsbabel> -s ${CMAKE_CURRENT_SOURCE_DIR}
COMMAND ${CMAKE_COMMAND} -E copy $<TARGET_BUNDLE_DIR:gpsbabelfe>/../GPSBabelFE.dmg ${CMAKE_CURRENT_BINARY_DIR}
DEPENDS gpsbabelfe gpsbabel gpsbabelfe_lrelease coretool_lrelease
VERBATIM
elseif(UNIX)
get_target_property(_qmake_executable Qt${QT_VERSION_MAJOR}::qmake IMPORTED_LOCATION)
add_custom_target(package_app
- COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/package_app -a $<TARGET_FILE_DIR:gpsbabelfe> -l -q ${_qmake_executable} -g $<TARGET_FILE:gpsbabel> -s ${CMAKE_CURRENT_SOURCE_DIR}
+ COMMAND ${CMAKE_CURRENT_SOURCE_DIR}/package_app -a $<TARGET_FILE_DIR:gpsbabelfe> -q ${_qmake_executable} -g $<TARGET_FILE:gpsbabel> -s ${CMAKE_CURRENT_SOURCE_DIR}
DEPENDS gpsbabelfe gpsbabel gpsbabelfe_lrelease coretool_lrelease
VERBATIM
USES_TERMINAL)
+++ /dev/null
-# $Id: app.pro,v 1.19 2010-11-01 03:30:42 robertl Exp $
-#
-
-# set VERSION related variables and generate gbversion.h
-include(../gbversion.pri)
-
-GB.setupfile.input = setup.iss.qmake.in
-GB.setupfile.output = setup.iss
-QMAKE_SUBSTITUTES += GB.setupfile
-
-VERSION = $$GB.VERSION
-
-#CONFIG += qt causes link failure on msvc. Qt6EntryPoint.lib not added to libs.
-CONFIG(debug, debug|release) {
- CONFIG += console
-}
-CONFIG += c++17
-
-ICON = images/appicon.icns
-
-QT += core \
- gui \
- network \
- serialport \
- widgets \
- xml
-
-disable-mappreview {
- DEFINES += DISABLE_MAPPREVIEW
-} else {
- QT += webenginewidgets webchannel
-}
-
-unix:DESTDIR = objects
-unix:MOC_DIR = objects
-unix:OBJECTS_DIR = objects
-unix:RCC_DIR = objects
-unix:!mac:DESTDIR = GPSBabelFE
-mac:DESTDIR = .
-
-UI_DIR = tmp
-
-unix:!mac{
- TARGET=gpsbabelfe
-} else {
- TARGET=GPSBabelFE
-}
-
-win32-g++ {
- QMAKE_LFLAGS_RELEASE += -static-libgcc
-}
-
-# Set QMAKE_TARGET_BUNDLE_PREFIX so we get the correct CFBundleIdentifier in Info.plist
-darwin:QMAKE_TARGET_BUNDLE_PREFIX=org.gpsbabel
-
-# RESOURCES
-RESOURCES = app.qrc
-RC_FILE = app.rc
-
-# FORMS
-FORMS += aboutui.ui
-FORMS += advui.ui
-FORMS += donate.ui
-FORMS += filterui.ui
-!disable-mappreview {
- FORMS += gmapui.ui
-}
-FORMS += mainwinui.ui
-FORMS += miscfltui.ui
-FORMS += preferences.ui
-FORMS += rttrkui.ui
-FORMS += trackui.ui
-FORMS += upgrade.ui
-FORMS += version_mismatch.ui
-FORMS += wayptsui.ui
-
-# SOURCES
-SOURCES += aboutdlg.cc
-SOURCES += advdlg.cc
-SOURCES += donate.cc
-SOURCES += dpencode.cc
-SOURCES += filterdata.cc
-SOURCES += filterdlg.cc
-SOURCES += filterwidgets.cc
-SOURCES += format.cc
-SOURCES += formatload.cc
-!disable-mappreview{
- SOURCES += gmapdlg.cc
- SOURCES += gpx.cc
-}
-SOURCES += help.cc
-SOURCES += latlng.cc
-SOURCES += main.cc
-SOURCES += mainwindow.cc
-!disable-mappreview{
- SOURCES += map.cc
-}
-SOURCES += optionsdlg.cc
-SOURCES += preferences.cc
-SOURCES += processwait.cc
-SOURCES += runmachine.cc
-SOURCES += upgrade.cc
-SOURCES += version_mismatch.cc
-unix {
- SOURCES += serial_unix.cc
-} else:windows {
- SOURCES += serial_win.cc
-}
-
-# HEADERS
-HEADERS += aboutdlg.h
-HEADERS += advdlg.h
-HEADERS += appname.h
-HEADERS += babeldata.h
-HEADERS += donate.h
-HEADERS += filterdata.h
-HEADERS += filterdlg.h
-HEADERS += filterwidgets.h
-HEADERS += format.h
-HEADERS += formatload.h
-!disable-mappreview {
- HEADERS += gmapdlg.h
- HEADERS += gpx.h
-}
-HEADERS += help.h
-HEADERS += mainwindow.h
-!disable-mappreview {
- HEADERS += map.h
-}
-HEADERS += optionsdlg.h
-HEADERS += preferences.h
-HEADERS += processwait.h
-HEADERS += runmachine.h
-HEADERS += setting.h
-HEADERS += upgrade.h
-HEADERS += version_mismatch.h
-
-TRANSLATIONS += gpsbabelfe_ru.ts
-TRANSLATIONS += gpsbabelfe_de.ts
-TRANSLATIONS += gpsbabelfe_es.ts
-TRANSLATIONS += gpsbabelfe_fr.ts
-TRANSLATIONS += gpsbabelfe_hu.ts
-TRANSLATIONS += gpsbabelfe_it.ts
-
-unix:!mac {
- !defined(EMBED_TRANSLATIONS, var):EMBED_TRANSLATIONS = on
- !defined(EMBED_MAP, var):EMBED_MAP = on
-}
-equals(EMBED_TRANSLATIONS, on) {
- RESOURCES += translations.qrc
-}
-equals(EMBED_MAP, on) {
- RESOURCES += map.qrc
-}
-
-macx|linux{
- package.commands = QMAKE=$(QMAKE) ./package_app
- package.depends = $(TARGET)
- QMAKE_EXTRA_TARGETS += package
-}
-linux: QMAKE_DISTCLEAN += -r GPSBabelFE
-
-# build the compilation data base used by clang tools including clang-tidy,
-# as well as CLion.
-macx|linux{
- compile_command_database.target = compile_commands.json
- compile_command_database.commands = make clean; bear make
- QMAKE_EXTRA_TARGETS += compile_command_database
- QMAKE_DISTCLEAN += compile_commands.json
-}
#include <winver.h>
#include "gbversion.h"
-#define stringize_(S) #S
-#define stringize(S) stringize_(S)
-#define copyright_str(YEAR) stringize(\xa9 2002-##YEAR Robert Lipe)
-
IDI_ICON1 ICON "images/appicon.ico"
VS_VERSION_INFO VERSIONINFO
VALUE "FileDescription", "GPS format converter"
VALUE "FileVersion", VER_FILE_STR
VALUE "InternalName", "GPSBabelFE.exe"
- VALUE "LegalCopyright", copyright_str(VER_COPYRIGHT_YEAR)
+ VALUE "LegalCopyright", VER_COPYRIGHT_STR
VALUE "OriginalFilename", "GPSBabelFE.exe"
VALUE "ProductName", "GPSBabel"
VALUE "ProductVersion", VER_PRODUCT_STR
+++ /dev/null
-HEADERS += core_strings.h
-
-TRANSLATIONS += gpsbabel_ru.ts
-TRANSLATIONS += gpsbabel_de.ts
-TRANSLATIONS += gpsbabel_es.ts
-TRANSLATIONS += gpsbabel_fr.ts
-TRANSLATIONS += gpsbabel_hu.ts
-TRANSLATIONS += gpsbabel_it.ts
+++ /dev/null
-#
-# This project extracts the strings from the command line tool
-# that the GUI translates and updates the translation files for
-# these strings.
-#
-CONFIG += console
-CONFIG -= app_bundle
-
-QT -= gui
-QT += core \
- widgets
-
-TEMPLATE = app
-
-DESTDIR=objects
-OBJECTS_DIR=objects
-# trick qmake into making objects directory by listing it as MOC_DIR.
-MOC_DIR=objects
-
-DEFINES += GENERATE_CORE_STRINGS
-
-INCLUDEPATH += ..
-SOURCES += ../formatload.cc
-SOURCES += coretool.cc
-
-HEADERS += ../format.h
-HEADERS += ../formatload.h
-
-core_strings.target = core_strings.h
-core_strings.depends = $(TARGET)
-core_strings.depends += ../../gpsbabel
-core_strings.commands = $(COPY_FILE) ../../gpsbabel $(DESTDIR)gpsbabel &&
-core_strings.commands += ./$(TARGET) core_strings.h;
-QMAKE_EXTRA_TARGETS += core_strings
-QMAKE_DISTCLEAN += $(DESTDIR)gpsbabel
-
-# The line numbers are almost meaningless the way we generate corestrings.h, and we force everything to the same context.
-# With line numbers and the similartext heuristic enabled translations can be copied from an old message to a new message,
-# and marked as unfinished. The threshold for similar is low.
-# These will be used by the application, even though they really need to be checked.
-# Disable the similartext heuristic to avoid these mistranslations.
-qtPrepareTool(LUPDATE, lupdate)
-update.depends = core_strings.h
-update.commands = $$LUPDATE -disable-heuristic similartext core.pro
-QMAKE_EXTRA_TARGETS += update
-
-qtPrepareTool(LRELEASE, lrelease)
-release.depends = update
-release.commands = $$LRELEASE core.pro
-QMAKE_EXTRA_TARGETS += release
-
GPSBABEL=../gpsbabel
QMAKE=qmake
SOURCEDIR=.
-while getopts a:lg:q:s: name
+while getopts a:g:q:s: name
do
case $name in
a) APPDIR="$OPTARG";;
- l) SKIP_UPDATE_RELEASE=1;;
g) GPSBABEL="$OPTARG";;
q) QMAKE="$OPTARG";;
s) SOURCEDIR="$OPTARG";;
- ?) printf "Usage: %s: [-a package_directory] [-g gpsbabel] [-l] [-q qmake] [-s source_directory]\n" "$0"
+ ?) printf "Usage: %s: [-a package_directory] [-g gpsbabel] [-q qmake] [-s source_directory]\n" "$0"
exit 2;;
esac
done
APPDIR="$( cd "${APPDIR}" && pwd )"
LCONVERT="$(${QMAKE} -query QT_INSTALL_BINS)/lconvert"
-LUPDATE="$(${QMAKE} -query QT_INSTALL_BINS)/lupdate"
-LRELEASE="$(${QMAKE} -query QT_INSTALL_BINS)/lrelease"
MACDEPLOYQT="$(${QMAKE} -query QT_INSTALL_BINS)/macdeployqt"
QT_INSTALL_TRANSLATIONS="$(${QMAKE} -query QT_INSTALL_TRANSLATIONS)"
-if [ -z "${SKIP_UPDATE_RELEASE}" ]; then
- # update our translations and compile them.
- "${LUPDATE}" "${SOURCEDIR}/app.pro"
- "${LRELEASE}" "${SOURCEDIR}/app.pro"
-fi
-
if [ "${machine}" = "Linux" ]; then
LANGDIR="${APPDIR}/translations"
else
+++ /dev/null
-;\r
-; NOTE: setup.iss is generated from setup.iss.in via configure.\r
-; The generated setup.iss is checked in to help keep the version numbers\r
-; synchronized.\r
-;\r
-; Script for generating installation setup program for GPSBabel\r
-; Uses the Inno setup compiler.\r
-; windeployqt should be run to prepare the necessary Qt files before\r
-; running Inno Setup.\r
-#ifndef output_dir\r
- #define output_dir \".\"\r
-#endif\r
-#ifndef source_dir\r
- #define source_dir \".\"\r
-#endif\r
-\r
-[Setup]\r
-; NOTE: The value of AppId uniquely identifies this application.\r
-; Do not use the same AppId value in installers for other applications.\r
-; (To generate a new GUID, click Tools | Generate GUID inside the IDE.)\r
-AppId={{1B8FE958-A304-4902-BF7A-4E2F0F5B7017}\r
-AppName=GPSBabel\r
-AppVerName=GPSBabel $${GB.VERSION}$${GB.PACKAGE_RELEASE}\r
-AppPublisher=GPSBabel\r
-AppPublisherURL=https://www.gpsbabel.org\r
-AppSupportURL=https://www.gpsbabel.org\r
-AppUpdatesURL=https://www.gpsbabel.org\r
-ArchitecturesAllowed=x64\r
-ArchitecturesInstallIn64BitMode=x64\r
-DefaultDirName={pf}\\GPSBabel\r
-DefaultGroupName=GPSBabel\r
-OutputDir=\"{#output_dir}\"\r
-OutputBaseFilename=GPSBabel-$${GB.VERSION}$${GB.PACKAGE_RELEASE}-Setup\r
-OutputManifestFile=GPSBabel-$${GB.VERSION}$${GB.PACKAGE_RELEASE}-Manifest.txt\r
-SetupIconFile=images\\babel2.ico\r
-Compression=lzma\r
-SolidCompression=yes\r
-SourceDir=\"{#source_dir}\"\r
-LicenseFile=COPYING.txt\r
-\r
-[Languages]\r
-Name: \"english\"; MessagesFile: \"compiler:Default.isl\"\r
-\r
-[Tasks]\r
-Name: \"desktopicon\"; Description: \"{cm:CreateDesktopIcon}\"; GroupDescription: \"{cm:AdditionalIcons}\"; Flags: unchecked\r
-\r
-[Files]\r
-Source: gmapbase.html; DestDir: \"{app}\"; Flags: ignoreversion\r
-Source: qt.conf; DestDir: \"{app}\"; Flags: ignoreversion\r
-\r
-Source: \"{#output_dir}\\package\\*\"; Excludes: \"vc_redist.*.exe\"; DestDir: \"{app}\"; Flags: ignoreversion recursesubdirs createallsubdirs\r
-Source: \"{#output_dir}\\package\\vc_redist.x86.exe\"; DestDir: \"{app}\"; Flags: ignoreversion skipifsourcedoesntexist deleteafterinstall\r
-Source: \"{#output_dir}\\package\\vc_redist.x64.exe\"; DestDir: \"{app}\"; Flags: ignoreversion skipifsourcedoesntexist deleteafterinstall\r
-Source: \"{#output_dir}\\package\\gpsbabel.exe\"; DestDir: \"{app}\"; Flags: ignoreversion\r
-; Source: release\\help\\*; DestDir: \"{app}\\help\"; Flags: ignoreversion recursesubdirs createallsubdirs\r
-\r
-; Translation strings extracted from source code. Include it in the dist\r
-; so that users can translate if they want to.\r
-; Source: gpsbabel_*.ts; DestDir: \"{app}\\translations\"; Flags: ignoreversion\r
-; Source: gpsbabelfe_*.ts; DestDir: \"{app}\\translations\"; Flags: ignoreversion\r
-\r
-; Compiled translation strings that are used at runtime.\r
-Source: coretool\\gpsbabel_*.qm; DestDir: \"{app}\\translations\"; Flags: ignoreversion\r
-Source: gpsbabelfe_*.qm; DestDir: \"{app}\\translations\"; Flags: ignoreversion\r
-\r
-; Miscellaneous\r
-Source: COPYING.txt; DestDir: {app}; Flags: ignoreversion\r
-; Source: AUTHORS; DestDir: {app}; Flags: ignoreversion\r
-; Source: README.contrib; DestDir: {app}; Flags: ignoreversion\r
-; Source: README.gui; DestDir: {app}; Flags: ignoreversion\r
-\r
-\r
-; NOTE: Don\'t use \"Flags: ignoreversion\" on any shared system files\r
-\r
-[Icons]\r
-Name: \"{group}\\GPSBabel\"; Filename: \"{app}\\gpsbabelfe.exe\"\r
-Name: \"{commondesktop}\\GPSBabel\"; Filename: \"{app}\\gpsbabelfe.exe\"; Tasks: desktopicon\r
-\r
-[Run]\r
-Filename: \"{app}\\vc_redist.x86.exe\"; Parameters: \"/quiet\"; Flags: skipifdoesntexist\r
-Filename: \"{app}\\vc_redist.x64.exe\"; Parameters: \"/quiet\"; Flags: skipifdoesntexist\r
-Filename: \"{app}\\gpsbabelfe.exe\"; Description: \"{cm:LaunchProgram,GPSBabelFE}\"; Flags: nowait postinstall skipifsilent\r
-\r
-[Registry]\r
-Root: HKCU; Subkey: \"Software\\GPSBabel\"; Flags: uninsdeletekeyifempty\r
-Root: HKCU; Subkey: \"Software\\GPSBabel\\GPSBabel\"; Flags: uninsdeletekey\r
-Root: HKCU; Subkey: \"Software\\GPSBabel\\GPSBabelFE\"; Flags: uninsdeletekey\r
-\r
-; ISPP preprocessor output can be useful for debug\r
-#expr SaveToFile(\"PreprocessedScript.iss\")\r
+++ /dev/null
-unix {
- !defined(WITH_LIBUSB, var) {
- mac: WITH_LIBUSB = included
- !mac: WITH_LIBUSB = system
- }
- equals(WITH_LIBUSB, no) {
- message("libusb-1.0 disabled")
- JEEPS += jeeps/gpsusbstub.cc
- } else {
- DEFINES += HAVE_LIBUSB_1_0
- JEEPS += jeeps/gpslibusb.cc
- equals(WITH_LIBUSB, pkgconfig) {
- message("Using libusb-1.0 found by pkg-config")
- PKGCONFIG += libusb-1.0
- DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
- } else {
- !mac {
- equals(WITH_LIBUSB, system) {
- LIBS += "-lusb-1.0"
- DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb-1.0/libusb.h>)
- } else:equals(WITH_LIBUSB, custom) {
- message("libusb-1.0 is enabled but but must be manually configured")
- message(" e.g. qmake WITH_LIBUSB=custom LIBS+=... INCLUDEPATH+=...")
- DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
- } else {
- error("WITH_LIBUSB=no|pkgconfig|system*|custom");
- }
- }
-
- mac {
- equals(WITH_LIBUSB, included) {
- # TODO: It would be better to create an archive and link to it
- # to separate library build requirements from gpsbabel requirements.
- DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(\"mac/libusb/libusb.h\")
- LIBS += -lobjc -framework IOKit -framework CoreFoundation -framework Security
- INCLUDEPATH += mac/libusb \
- mac/libusb/Xcode
- SOURCES += \
- mac/libusb/core.c \
- mac/libusb/descriptor.c \
- mac/libusb/hotplug.c \
- mac/libusb/io.c \
- mac/libusb/strerror.c \
- mac/libusb/sync.c \
- mac/libusb/os/darwin_usb.c \
- mac/libusb/os/events_posix.c \
- mac/libusb/os/threads_posix.c
- HEADERS += \
- mac/libusb/libusb.h \
- mac/libusb/libusbi.h \
- mac/libusb/version.h \
- mac/libusb/version_nano.h \
- mac/libusb/os/darwin_usb.h \
- mac/libusb/os/events_posix.h \
- mac/libusb/os/threads_posix.h
- } else:equals(WITH_LIBUSB, custom) {
- message("libusb-1.0 is enabled but but must be manually configured")
- message(" e.g. qmake WITH_LIBUSB=custom LIBS+=... INCLUDEPATH+=...")
- DEFINES += LIBUSB_H_INCLUDE=$$shell_quote(<libusb.h>)
- } else {
- error("WITH_LIBUSB=no|pkgconfig|included*|custom");
- }
- }
- }
- }
-}
+++ /dev/null
-# Were using qmake to build a library that has nothing to do with Qt.
-# Dummy out qt defaults.
-QT -= gui
-QT -= core
-
-CONFIG += staticlib
-TEMPLATE = lib
-
-TARGET = usb-1.0
-
-SOURCES = core.c \
- descriptor.c \
- hotplug.c \
- io.c \
- strerror.c \
- sync.c \
- os/darwin_usb.c \
- os/events_posix.c \
- os/threads_posix.c
-
-HEADERS = libusb.h \
- libusbi.h \
- version.h \
- version_nano.h \
- os/darwin_usb.h \
- os/events_posix.h \
- os/threads_posix.h
-
-# We use libusb-1.0.0's hardcoded config.h for Xcode
-# Note that we want don't want the path containing the Xcode config.h
-# to be found when building gpsbabel, i.e. it can't be next to libusb.h.
-INCLUDEPATH = Xcode
-
+++ /dev/null
-!defined(WITH_SHAPELIB, var):WITH_SHAPELIB = included
-equals(WITH_SHAPELIB, no) {
- message("shapelib disabled")
-} else {
- DEFINES += SHAPELIB_ENABLED
- equals(WITH_SHAPELIB, pkgconfig) {
- message("Using shapelib found by pkg-config")
- PKGCONFIG += shapelib
- DEFINES += HAVE_LIBSHAPE
- } else:equals(WITH_SHAPELIB, included) {
- # TODO: It would be better to create an archive and link to it
- # to separate library build requirements from gpsbabel requirements.
- SOURCES += \
- shapelib/dbfopen.c \
- shapelib/safileio.c \
- shapelib/shpopen.c
- HEADERS += \
- shapelib/shapefil.h
- } else:equals(WITH_SHAPELIB, custom) {
- message("shapelib is enabled but but must be manually configured")
- message(" e.g. qmake WITH_SHAPELIB=custom LIBS+=... INCLUDEPATH+=...")
- DEFINES += HAVE_LIBSHAPE
- } else {
- error("WITH_SHAPELIB=no|pkgconfig|included*|custom");
- }
-}
WORKDIR /app
# basic tools to build
-RUN dnf install --assumeyes git make valgrind diffutils findutils langpacks-en && \
+RUN dnf install --assumeyes git make valgrind diffutils findutils langpacks-en ninja-build && \
dnf clean all
# libraries used by gpsbabel. zlib and shapelib may or may not be used depending qmake options.
RUN dnf install --assumeyes libusbx-devel zlib-devel shapelib-devel && \
WORKDIR /app
# basic tools to build
-RUN dnf install --assumeyes git make valgrind diffutils findutils langpacks-en && \
+RUN dnf install --assumeyes git make valgrind diffutils findutils langpacks-en ninja-build && \
dnf clean all
# libraries used by gpsbabel. zlib and shapelib may or may not be used depending qmake options.
RUN dnf install --assumeyes libusb1-devel zlib-devel shapelib-devel && \
+++ /dev/null
-#!/bin/bash -ex
-#
-# this script is triggered by SCM changes and is run on the build server.
-# output is conditionally mailed to gpsbabel-code.
-#
-# echo some system info to log
-uname -a
-if [ -e /etc/system-release ]; then
- cat /etc/system-release
-fi
-if [ -e /etc/os-release ]; then
- cat /etc/os-release
-fi
-git --no-pager log -n 1
-# build and test keeping output within the pwd.
-export GBTEMP=$(pwd)/gbtemp
-mkdir -p "$GBTEMP"
-qmake WEB="$(pwd)/gpsbabel_docdir"
-# As of 2018-10, all the virtualized travis build images are two cores per:
-# https://docs.travis-ci.com/user/reference/overview/
-# We'll be slightly abusive on CPU knowing that I/O is virtualized.
-make toolinfo
-make clean
-make -j 3
-make -j 3 unix-gui
-make gpsbabel.html
-make gpsbabel.pdf
-make gpsbabel.org
-make check
-# test for mangled encoding of command line arguments
-./test_encoding_latin1
-./test_encoding_utf8
-#make torture
-make -k -j2 check-vtesto
-# eat the verbose output from test-all, including crash.output
-# this is a bit risky, if test-all generates an error we won't see what happened.
-echo "test-all in progress... (read/write test between all possible formats)"
-(LIBC_FATAL_STDERR_=1; export LIBC_FATAL_STDERR_; ./test-all -s -r reference/expertgps.gpx >/dev/null 2>&1)
-# summarize the test-all results, and generate an error if a fatal error was
-# detected by test-all.
-./test-all -J
+++ /dev/null
-# Script to build and create windows installer.\r
-#\r
-# Run this from a Qt Desktop command window that has the Qt and mingw compiler paths set up,\r
-# such as the one Qt Creator will put on the start menu.\r
-# For example, to run overriding the default locations of windeployqt and ISSC:\r
-# powershell.exe -ExecutionPolicy Unrestricted -File tools\make_windows_release.ps1 -windeployqt "C:\Qt\5.6.3\mingw49_32\bin\windeployqt.exe" -iscc "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" -flow mingw\r
-# Or to do a 64 bit MSVC build with a newer Qt:\r
-# powershell.exe -ExecutionPolicy Unrestricted -File tools\make_windows_release.ps1 -iscc "C:\Program Files (x86)\Inno Setup 5\ISCC.exe" -gpsbabel_build_dir_name "build-GPSBabel-Desktop_Qt_5_9_3_MSVC2015_64bit-Release" -gui_build_dir_name "build-app-Desktop_Qt_5_9_3_MSVC2015_64bit-Release"\r
-#\r
-# Be aware this script is used by appveyor.yml\r
-#\r
-# The defaults should be compatible with appveyor builds.\r
-Param(\r
- $windeployqt = "windeployqt.exe",\r
- $iscc = "C:\Program Files (x86)\Inno Setup 5\ISCC.exe",\r
- $gpsbabel_build_dir_name = "bld",\r
- [ValidateSet("mingw", "msbuild", "nmake")] $flow = "nmake",\r
- $buildinstaller = "false",\r
- [ValidateSet("x86", "amd64", "amd64_x86", "x86_amd64")] $arch = "amd64"\r
-)\r
-# the arch parameter values correspond to:\r
-# vcvarsall arch parameter x86 => host x86, target x86.\r
-# vcvarsall arch paramter amd64 => host amd64, target amd64.\r
-# vcvarsall arch parameter amd64_x86 => host amd64, target x86\r
-# vcvarsall arch parameter x86_amd64 => host x86, target amd64\r
-# vsdevcmd arch parameter x86 => target x86.\r
-# vsdevcmd arch parameter amd64 => target amd64.\r
-$ErrorActionPreference = "Stop"\r
-# verify we are in the top of the gpsbabel clone\r
-Get-Item tools/make_windows_release.ps1 -ErrorAction Stop | Out-Null\r
-$gpsbabel_src_dir = "$Pwd"\r
-$gpsbabel_build_dir = "$($gpsbabel_src_dir)\$($gpsbabel_build_dir_name)"\r
-$gui_build_dir = "$($gpsbabel_build_dir)\gui"\r
-if ( "$flow" -eq "msbuild" ) {\r
- # translate target architecture to Platform property value.\r
- switch ($arch) {\r
- "x86" { $platform = "Win32" }\r
- "amd64" { $platform = "x64" }\r
- "amd64_x86" { $platform = "Win32" }\r
- "x86_amd64" { $platform = "x64" }\r
- }\r
-}\r
-# mimic creator shadow build to match Inno setup file\r
-# make sure we are staring with a clean build directory\r
-Remove-Item "$($gpsbabel_build_dir)" -Recurse -ErrorAction Ignore\r
-New-Item "$($gpsbabel_build_dir)" -type directory -Force | Out-Null\r
-Set-Location "$($gpsbabel_build_dir)"\r
-switch ($flow) {\r
- "mingw" { qmake "$($gpsbabel_src_dir)\GPSBabel.pro" -spec "win32-g++" }\r
- # work around Qt 5.12.1, 5.12.2 qmake bug.\r
- #C:\Qt\5.12.1\msvc2017\bin\qmake.exe -tp vc GPSBabel.pro\r
- #WARNING: Could not parse Compiler option '-std:c++14'; added to AdditionalOptions.\r
- #WARNING: You can suppress these warnings with CONFIG+=suppress_vcproj_warnings.\r
- #WARNING: Could not parse Compiler option '-std:c++14'; added to AdditionalOptions.\r
- "msbuild" { $ErrorActionPreference = "Continue"; qmake -tp vc "$($gpsbabel_src_dir)\GPSBabel.pro"; $ErrorActionPreference = "Stop" }\r
- "nmake" { qmake "$($gpsbabel_src_dir)\GPSBabel.pro" -spec "win32-msvc" }\r
-}\r
-if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }\r
-switch ($flow) {\r
- "mingw" { ming32-make }\r
- "msbuild" { msbuild GPSBabel.vcxproj -property:Configuration=Release -property:Platform=$platform }\r
- "nmake" { nmake /NOLOGO }\r
-}\r
-if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }\r
-# make sure we are staring with a clean build directory\r
-Remove-Item "$($gui_build_dir)" -Recurse -ErrorAction Ignore\r
-New-Item "$($gui_build_dir)" -type directory -Force | Out-Null\r
-Set-Location "$($gui_build_dir)"\r
-switch ($flow) {\r
- "mingw" { qmake "$($gpsbabel_src_dir)\gui\app.pro" -spec "win32-g++" }\r
- "msbuild" { qmake -tp vc "$($gpsbabel_src_dir)\gui\app.pro" }\r
- "nmake" { qmake "$($gpsbabel_src_dir)\gui\app.pro" -spec "win32-msvc" }\r
-}\r
-if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }\r
-switch ($flow) {\r
- "mingw" { ming32-make }\r
- "msbuild" { msbuild GPSBabelFE.vcxproj -property:Configuration=Release -property:Platform=$platform }\r
- "nmake" { nmake /NOLOGO }\r
-}\r
-if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }\r
-Set-Location "$($gui_build_dir)"\r
-# work around errors with lupdate, lrelease misprocessing qtHaveModule(webenginewidgets)\r
-# and generating a message to stderr WARNING: Project ERROR: Unknown module(s) in QT: webkit webkitwidgets\r
-# and, on Windows, setting $? to false.\r
-# (assuming they are not installed).\r
-$ErrorActionPreference = "Continue"\r
-lupdate "$($gpsbabel_src_dir)\gui\app.pro"\r
-lrelease "$($gpsbabel_src_dir)\gui\app.pro"\r
-$ErrorActionPreference = "Stop"\r
-# deploy to a clean directory as different build systems create differently named debris in release.\r
-Remove-Item "$($gui_build_dir)\package" -Recurse -ErrorAction Ignore\r
-New-Item "$($gui_build_dir)\package" -type directory -Force | Out-Null\r
-Copy-Item "$($gpsbabel_build_dir)\release\gpsbabel.exe" "$($gui_build_dir)\package\gpsbabel.exe"\r
-Copy-Item "$($gui_build_dir)\release\GPSBabelFE.exe" "$($gui_build_dir)\package\GPSBabelFE.exe"\r
-# use --plugindir option to locate the plugins.\r
-& "$($windeployqt)" --verbose 1 --plugindir package\plugins package\GPSBabelFE.exe package\gpsbabel.exe\r
-if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }\r
-if ($buildinstaller -eq "true") {\r
- # set location to location of generated setup.iss file.\r
- & "$($iscc)" /Doutput_dir="$($gui_build_dir)" /Dsource_dir="$($gpsbabel_src_dir)\gui" setup.iss\r
- if ($LastExitCode -ne 0) { $host.SetShouldExit($LastExitCode) }\r
-}\r
-Set-Location "$($gpsbabel_src_dir)"\r
remove_line $1.cc CMakeLists.txt
remove_line $1.h CMakeLists.txt
remove_line $1 CMakeLists.txt # for tests.
-remove_line $1.cc GPSBabel.pro
-remove_line $1.h GPSBabel.pro
remove_line $1 gpsbabel.qrc
remove_manually $1 reference/help.txt
git checkout reference/format2.txt
git checkout reference/format3.txt reference/help.txt
-rm GPSBabel.pro vecs.h vecs.cc
-# git rm GPSBabel.pro vecs.h
-#git reset GPSBabel.pro
+rm vecs.h vecs.cc
+# git rm vecs.h
#git reset vecs.h
-git checkout GPSBabel.pro vecs.h vecs.cc
+git checkout vecs.h vecs.cc
# This part of the code devalues almot immediately once pushed upstream
echo "Now re-killing formats to exercise the script. ^C to cancel. <enter> to ontinue"
+++ /dev/null
-#!/bin/bash -ex
-#
-# this script is run on travis for the script stage of mac builds
-#
-
-function version_ge() { test "$(printf "%s\n%s" $1 $2 | sort -rV | head -n 1)" == "$1"; }
-
-QMAKE=${QMAKE:-qmake}
-LUPDATE=${LUPDATE:-lupdate}
-LRELEASE=${LRELEASE:-lrelease}
-MACDEPLOYQT=${MACDEPLOYQT:-macdeployqt}
-# we assume we are on macOS, so date is not gnu date.
-VERSIONID=${VERSIONID:-$(date -ju -f %Y-%m-%dT%H:%M:%S%z $(git show -s --format="%aI" HEAD | sed 's/:\(..\)$/\1/') +%Y%m%dT%H%MZ)-$(git rev-parse --short=7 HEAD)}
-
-# debug tokens
-"$(cd "$(dirname "${BASH_SOURCE[0]}" )" && pwd)"/ci_tokens
-
-# build and test the CLI
-if version_ge $($QMAKE -query QT_VERSION) 6.0.0; then
- $QMAKE GPSBabel.pro QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64"
-else
- $QMAKE GPSBabel.pro
-fi
-make -j 3
-make check
-
-# build the GUI
-pushd gui
-if version_ge $($QMAKE -query QT_VERSION) 6.0.0; then
- $QMAKE app.pro QMAKE_APPLE_DEVICE_ARCHS="x86_64 arm64"
-else
- $QMAKE app.pro
-fi
-make -j 3
-make package
-popd
-
-# what is in there?
-hdiutil attach -noverify gui/GPSBabelFE.dmg
-find /Volumes/GPSBabelFE -ls
-hdiutil detach /Volumes/GPSBabelFE
-
-mv gui/GPSBabelFE.dmg gui/GPSBabel-${VERSIONID}.dmg
-
#include <winver.h>
#include "gbversion.h"
-#define stringize_(S) #S
-#define stringize(S) stringize_(S)
-#define copyright_str(YEAR) stringize(\xa9 2002-##YEAR Robert Lipe)
-
IDI_ICON1 ICON "gpsbabel.ico"
VS_VERSION_INFO VERSIONINFO
VALUE "FileDescription", "GPS format converter"
VALUE "FileVersion", VER_FILE_STR
VALUE "InternalName", "gpsbabel.exe"
- VALUE "LegalCopyright", copyright_str(VER_COPYRIGHT_YEAR)
+ VALUE "LegalCopyright", VER_COPYRIGHT_STR
VALUE "OriginalFilename", "gpsbabel.exe"
VALUE "ProductName", "GPSBabel"
VALUE "ProductVersion", VER_PRODUCT_STR
<chapter id="Getting_and_Building">
<title>Getting or Building GPSBabel</title>
-<sect1 id="Download">
-<title>Downloading - the easy way.</title>
- <para>
+ <sect1 id="Download">
+ <title>Downloading - the easy way.</title>
+ <para>
GPSBabel is distributed "ready to run" on most common
operating systems via the
<ulink url="https://www.gpsbabel.org/download.html">download page</ulink>.
</para>
- <para> As GPSBabel runs on a wide variety of operating systems,
+ <para> As GPSBabel runs on a wide variety of operating systems,
be sure to visit the
<ulink url="https://www.gpsbabel.org/osnotes.html">OS-Specific notes</ulink> for
additional information.
</para>
-</sect1>
-<sect1 id="Source">
-<title>Building from source.</title>
- <para>
- For operating systems where no binary is provided, or if
+ </sect1>
+ <sect1 id="Source">
+ <title>Building from source.</title>
+ <para>
+For operating systems where no binary is provided, or if
you want the latest development version, you will have to build it from
source. The code should be compilable on any system with
ISO C++17. It's tested on Ubuntu, macOS, and Windows.
Less frequently, someone will build on FreeBSD, OpenBSD, Solaris,
etc. Clang/LLVM, GNU C++, and MSVC are regularly exercised via automation.
</para>
-<para>
+ <para>
You can grab a release from the <ulink url="https://www.gpsbabel.org/download.html">GPSBabel download page</ulink>, but if you're going to be doing any development, you'll find that working from the <ulink url="https://github.com/gpsbabel/gpsbabel">GPSBabel Github repo</ulink> is easier. Checkouts via Git, HTTPS, SSH, and Subversion are supported.
</para>
-<para>There are external requirements for bulding.</para>
-<variablelist>
-<varlistentry>
-<term>
-<ulink url="http://qt-project.org">Qt</ulink></term>
-<listitem>
-<para>
+ <para>There are external requirements for bulding.</para>
+ <variablelist>
+ <varlistentry>
+ <term>
+ <ulink url="http://qt-project.org">Qt</ulink>
+ </term>
+ <listitem>
+ <para>
Qt version 5.12 or newer is required for all builds. MacOS and Windows users can download
binaries from <ulink url="http://qt-project.org/downloads">Qt Downloads</ulink>
Fedora or CentOS users may need to 'dnf install qt5-qtbase-devel'. When in doubt, 'dnf search qt' or 'dnf search qt5' may help you find the correct package name. Ubuntu users may need to 'apt-get install qt5-default'. Package names
for help or look in tools/Docker* for inspiration for our automated builds that
use Docker.
</para>
-</listitem>
-</varlistentry>
-
-<varlistentry>
- <term>
- <ulink url="http://libusb.sourceforge.net">libusb 1.0</ulink>
- </term>
-<listitem>
- <para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>
+ <ulink url="http://libusb.sourceforge.net">libusb 1.0</ulink>
+ </term>
+ <listitem>
+ <para>
is needed to communicate with use with older USB Garmins.
For macOS, we use an included copy.
Fedora users may need to 'yum install libusb-devel'. Ubuntu users may
need to 'apt install libusb-dev' or look in tools/Docker* for inspiration
from our automated Docker builds.</para>
-</listitem>
-</varlistentry>
-
-</variablelist>
-<sect2 id="Internal_History">
-<title>Brief history of internals</title>
- <para>
+ </listitem>
+ </varlistentry>
+ </variablelist>
+ <sect2 id="Internal_History">
+ <title>Brief history of internals</title>
+ <para>
Parts of GPSBabel have been public since 2002, with some of the original
design and original code came from 2001. It was originally in C89, not C++
and while we strongly encourage modern C++ code where we can use it, we've
not enforced style rules as strongly across modules as we could have. Fixing
both of these is a goal for us in 2020.
</para>
-</sect2>
-
-<sect2 id="Qt">
- <title>Building with Qt Creator</title>
- <para>
- Qt provides a lovely IDE (Integrated Development Evironment) with an
- editor and debugger. Its use is strongly encouraged for those new to C++.
- Once you have Qt correctly installed, just opening either the <filename>
- GPSBabel.pro</filename> or <filename>gui/app.pro</filename> files from
- the OS file launcher (e.g. a double click in macOS while seeing it in Finder)
- or from a File->Open in an already-running instance of <ulink url="https://www.qt.io/development-tools">Qt Creator</ulink> is the fastest and easiest way for most
- people to get to development because it handles things like build dependencies
- changing and class and method compilation.
+ </sect2>
+ <sect2 id="Qt">
+ <title>Building with Qt Creator</title>
+ <para>
+Qt provides a lovely IDE (Integrated Development Evironment) with an
+editor and debugger. Its use is strongly encouraged for those new to C++.
+Once you have Qt correctly installed, just opening the <filename>
+CMakeLists.txt</filename> from
+the File->Open menu in an already-running instance of <ulink url="https://www.qt.io/development-tools">Qt Creator</ulink> is the fastest and easiest way for most
+people to get to development because it handles things like build dependencies
+changing and class and method compilation.
</para>
- <para>A path of low resistance for some users is to use the Qt build files (*.pro)
- and compiler chain, but use the command line. If you type <ulink url="https://doc.qt.io/qt-5/qmake-manual.html"> qmake</ulink> in our working
- directory, it will build a "native" Build file (Makefile, XCode, Visual Studio)
- which you can use for development.
+ <para>
+A path of low resistance for some users is to use the CMakeLists.txt file
+from the command line. If you type <ulink url="https://cmake.org/cmake/help/latest/">cmake .</ulink> in our working
+directory it will create a buildsystem with the default generator (Unix Makefiles or Visual Studio) which you can use for development.
</para>
- </sect2>
-<sect2 id="Configure">
- <title>Building with configure</title>
-<para>
-The GNU Build System (configure) is no longer supported and has
-been removed. For command line builds please use <link linkend="qmake">qmake</link>.
-</para>
-</sect2>
-<sect2 id="cmake">
- <title>Building with cmake</title>
-<para>
-The use of cmake is experimental. The implementation is not complete. It is
-untested by continuous integration. It is not recommended for production use.
-</para>
-</sect2>
- <sect2 id="qmake">
- <title>Building with qmake</title>
- <para>
-Those familiar with the command line may be more comfortable
-using qmake from the command line. In most cases, the code is as simple to build as running:
-</para>
+ </sect2>
+ <sect2 id="cmake">
+ <title>Building from the command line</title>
<para>
- <userinput>qmake && make</userinput>
+Those familiar with the command line may be more comfortable using cmake from the command line.
+It is important to set the CMAKE_BUILD_TYPE when generating a build system with single configuration generators such as Unix Makefiles and Ninja.
+With multi-configuration generators such as Visual Studio and Xcode the build type is selected at build time instead of when generating the build system.
</para>
- <para>
-Two build methods are supported with MSVC tools.
-</para>
<simplelist>
<member>
+To create a buildsystem using Ninja:
+<userinput>cmake -G Ninja -DCMAKE_BUILD_TYPE=Release .</userinput>
+</member>
+ <member>
To create a visual studio project that can be built with msbuild:
-<userinput>qmake -tp vc</userinput>
+<userinput>cmake -G "Visual Studio 17 2022" .</userinput>
</member>
<member>
-To create a Makefile that can be built with nmake:
-<userinput>qmake</userinput>
+To create a Xcode project:
+<userinput>cmake -G Xcode .</userinput>
</member>
</simplelist>
<para>
-</para>
- <para>There are additional flags that can be passed to qmake to
+ </para>
+ <para>
+There are additional variables that can be defined cmake on the cmake command line to
customize your build of GPSBabel.
-</para>
+ </para>
<variablelist>
<varlistentry>
- <term>WITH_LIBUSB=no|pkgconfig|system*|included*|custom</term>
+ <term>GPSBABEL_WITH_LIBUSB=no|pkgconfig|system*|included*|custom</term>
<listitem>
- <para>
-note that libusb is NOT used on windows.
-</para>
+ <para>note that libusb is NOT used on windows.</para>
<variablelist>
<varlistentry>
<term>no</term>
<varlistentry>
<term>system</term>
<listitem>
- <para>build with libusb-1.0 found on system library path and under
-libusb-1.0 on system include path (default, linux, openbsd).</para>
+ <para>
+build with libusb-1.0 found on system library path and under
+libusb-1.0 on system include path (default, linux, openbsd).
+ </para>
</listitem>
</varlistentry>
<varlistentry>
<varlistentry>
<term>custom</term>
<listitem>
- <para>build with user supplied libusb-1.0. LIBS and INCLUDEPATH may need to
-be set, e.g. LIBS+=... INCLUDEPATH+=...</para>
+ <para>
+build with user supplied libusb-1.0. LIBS and INCLUDEPATH may need to
+be set with GPSBABEL_EXTRA_LINK_LIBRARIES and GPSBABEL_EXTRA_INCLUDE_DIRECTORIES.
+ </para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
- <term>WITH_SHAPELIB=no|pkgconfig|included*|custom</term>
+ <term>GPSBABEL_WITH_SHAPELIB=no|pkgconfig|included*|custom</term>
<listitem>
<variablelist>
<varlistentry>
<varlistentry>
<term>custom</term>
<listitem>
- <para>build with user supplied shapelib. LIBS and INCLUDEPATH may need to
-be set, e.g. LIBS+=... INCLUDEPATH+=...</para>
+ <para>
+build with user supplied shapelib. LIBS and INCLUDEPATH may need to
+be set with GPSBABEL_EXTRA_LINK_LIBRARIES and
+GPSBABEL_EXTRA_INCLUDE_DIRECTORIES.</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
- <term>WITH_ZLIB=no|pkgconfig|included*|custom</term>
+ <term>GPSBABEL_WITH_ZLIB=no|pkgconfig|included*|custom</term>
<listitem>
<variablelist>
<varlistentry>
<varlistentry>
<term>custom</term>
<listitem>
- <para>build with user supplied zlib. LIBS and INCLUDEPATH may need to be
-set, e.g. LIBS+=... INCLUDEPATH+=...</para>
+ <para>
+build with user supplied zlib. LIBS and INCLUDEPATH may need to
+be set with GPSBABEL_EXTRA_LINK_LIBRARIES and
+GPSBABEL_EXTRA_INCLUDE_DIRECTORIES.</para>
</listitem>
</varlistentry>
</variablelist>
</listitem>
</varlistentry>
<varlistentry>
- <term>CONFIG+=disable-mappreview</term>
+ <term>GPSBABEL_MAPPREVIEW</term>
<listitem>
<para>
-This options disables the map preview feature. With the feature disabled
+This options enables the map preview feature. With the feature disabled
QtWebEngine and QtWebEngineWdigets are not used. Note that QtWebKit and
QtWebKitWidgets are not longer supported.
-</para>
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>GPSBABEL_EMBED_MAP</term>
+ <listitem>
+ <para>
+Embed gmapbase.html for map preview. When using this option gmapbase.html
+will be compiled into the executable and does not need to be distributed.
+ </para>
</listitem>
</varlistentry>
<varlistentry>
- <term>DOCVERSION=...</term>
+ <term>GPSBABEL_EMBED_TRANSLATIONS</term>
+ <listitem>
+ <para>
+Embed translations. When using this option the gpsbabel provided
+translations will be compiled into the executable and do not need to be
+distributed. The Qt provided translations still need to be distributed.
+ </para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>GPSBABEL_ENABLE_PCH</term>
+ <listitem>
+ <para>Enable precompiled headers when building the target gpsbabel.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>GPSBABEL_EXTRA_COMPILE_OPTIONS</term>
+ <listitem>
+ <para>Extra compile options when building the target gpsbabel.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>GPSBABEL_EXTRA_INCLUDE_DIRECTORIES</term>
+ <listitem>
+ <para>Extra directories to include when building the target gpsbabel.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>GPSBABEL_LINK_LIBRARIES</term>
+ <listitem>
+ <para>Extra libraries to link when building the target gpsbabel.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>GPSBABEL_LINK_OPTIONS</term>
+ <listitem>
+ <para>Extra link options when building the target gpsbabel.</para>
+ </listitem>
+ </varlistentry>
+ <varlistentry>
+ <term>DOCVERSION</term>
<listitem>
<para>
string appended to documentation location for www.gpsbabel.org. The default
</listitem>
</varlistentry>
<varlistentry>
- <term>WEB=DIR</term>
+ <term>WEB</term>
<listitem>
<para>
Path where the documentation will be stored for www.gpsbabel.org. This is
</varlistentry>
</variablelist>
<para>
-Additional makefile targets are available for special purposes.
+Additional targets are available for special purposes.
</para>
<variablelist>
<varlistentry>
</listitem>
</varlistentry>
<varlistentry>
- <term>gui</term>
+ <term>package_app</term>
<listitem>
- <para>Build the graphical user interface.</para>
- </listitem>
- </varlistentry>
- <varlistentry>
- <term>unix-gui</term>
- <listitem>
- <para>Build the graphical user interface and collect the components for
-distribution. On Linux the gpsbabel generated components will be under
+ <para>
+Collect the components for distribution.
+On Linux the gpsbabel generated components will be under
gui/GPSBabelFE, any dynamically linked required libraries are not included.
On macOS an app bundle will be created at gui/GPSBabelFE.app and an apple disk
-image will be created at gui/GPSBabelFE.dmg.</para>
+image will be created at gui/GPSBabelFE.dmg.
+On windows an image will be created in the directory gui/package, and an
+installer will be created gui/Setup-x.y.z-Setup.exe.
+ </para>
</listitem>
</varlistentry>
</variablelist>
These are used by the GUI. Additional translation files from Qt will also be
used if they are found. They may be in a package such as qttranslations5-l10n
or qt5-qttranslations.
-</para>
+ </para>
</sect2>
-</sect1>
+ </sect1>
</chapter>
+++ /dev/null
-!defined(WITH_ZLIB, var):WITH_ZLIB = included
-equals(WITH_ZLIB, no) {
- message("zlib disabled")
- DEFINES += ZLIB_INHIBITED
-} else {
- equals(WITH_ZLIB, pkgconfig) {
- message("Using zlib found by pkg-config")
- PKGCONFIG += $$shell_quote(zlib > 1.2.8)
- DEFINES += HAVE_LIBZ
- } else:equals(WITH_ZLIB, included) {
- # TODO: It would be better to create an archive and link to it
- # to separate library build requirements from gpsbabel requirements.
- SOURCES += \
- zlib/adler32.c \
- zlib/compress.c \
- zlib/crc32.c \
- zlib/deflate.c \
- zlib/inffast.c \
- zlib/inflate.c \
- zlib/infback.c \
- zlib/inftrees.c \
- zlib/trees.c \
- zlib/uncompr.c \
- zlib/gzlib.c \
- zlib/gzclose.c \
- zlib/gzread.c \
- zlib/gzwrite.c \
- zlib/zutil.c
- INCLUDEPATH += zlib
- HEADERS += \
- zlib/crc32.h \
- zlib/deflate.h \
- zlib/gzguts.h \
- zlib/inffast.h \
- zlib/inffixed.h \
- zlib/inflate.h \
- zlib/inftrees.h \
- zlib/trees.h \
- zlib/zconf.h \
- zlib/zlib.h \
- zlib/zutil.h
- } else:equals(WITH_ZLIB, custom) {
- message("zlib is enabled but but must be manually configured")
- message(" e.g. qmake WITH_ZLIB=custom LIBS+=... INCLUDEPATH+=...")
- DEFINES += HAVE_LIBZ
- } else {
- error("WITH_ZLIB=no|pkgconfig|included*|custom");
- }
-}